package zmee.pmct.formplugin.pmas;

import kd.bos.bill.BillShowParameter;
import kd.bos.form.ShowType;
import kd.bos.form.events.BillListHyperLinkClickEvent;
import kd.bos.form.events.HyperLinkClickArgs;
import kd.bos.list.BillList;
import kd.bos.list.plugin.AbstractListPlugin;

import java.util.*;

/**
 * @Author: zyj
 * @Date: 2023/6/20 16:08
 * @Description: 支出合同列表: 通过供应商采购数据按钮显示的支出合同列表隐藏相关列
 */
public class PmctOutContractShowDetailListPlugin extends AbstractListPlugin {

    // 用来存放需要展示的列对象
    protected Set<String> showColumns;

    @Override
    public void beforeBindData(EventObject e) {
        // 目的: 供应商和物料中内嵌的支出合同列表隐藏相应列，只显示我想要的列
        // 获取状态 通过这个来识别是不是由供应商或者物料来的
        String state = this.getView().getFormShowParameter().getCustomParam("state");
        if (state != null) {
            if ("supplier".equals(state) || "material".equals(state)) {
                // 初始化列数据
                initShowData();
                BillList billList = this.getControl(AbstractListPlugin.BILLLISTID);
                // 获取列表上显示的列
                List<Map<String, Object>> lists = billList.getListFieldsControlColumns();
                for (Map<String, Object> list : lists) {
                    String listFieldKey = (String) list.get("listFieldKey");
                    // 把不是我想要展示的列数据隐藏
                    if (!showColumns.contains(listFieldKey)) {
                        // 这个设置隐藏会有部分字段未隐藏
                        this.getView().setVisible(false, listFieldKey);
                        // 故而在下方添加这种方式
                        list.put("visible", 0);
                    }
                }
            }
        }
    }

    @Override
    public void billListHyperLinkClick(HyperLinkClickArgs args) {
        // 目的: 供应商和物料中内嵌的支出合同列表支持超链接
        // 获取状态 通过这个来识别是不是由供应商或者物料来的
        String state = this.getView().getFormShowParameter().getCustomParam("state");
        if (state != null) {
            // 供应商 物料
            if ("supplier".equals(state) || "material".equals(state)) {
                // 判断是不是有单据编码产生的超链接事件
                if ("billno".equals(args.getFieldName()) && args.getHyperLinkClickEvent() instanceof BillListHyperLinkClickEvent) {
                    // 先取消原有的操作
                    args.setCancel(true);

                    BillListHyperLinkClickEvent linkClickEvent = (BillListHyperLinkClickEvent) args.getHyperLinkClickEvent();
                    BillList billList = (BillList) args.getHyperLinkClickEvent().getSource();
                    // 获取单据标识
                    String billFormId = billList.getBillFormId();
                    // 获取单据的pkid
                    Object primaryKeyValue = linkClickEvent.getCurrentRow().getPrimaryKeyValue();

                    // 构造一个BillShowParameter
                    BillShowParameter billShowParameter = new BillShowParameter();
                    // 设置跳转的单据标识
                    billShowParameter.setFormId(billFormId);
                    // 设置待跳转的单据pkid
                    billShowParameter.setPkId(primaryKeyValue);
                    // 设置打开方式
                    billShowParameter.getOpenStyle().setShowType(ShowType.Modal);

                    getView().showForm(billShowParameter);
                }
            }
        }
    }

    /**
     * 加载需要展示的列
     */
    protected void initShowData() {
        showColumns = new HashSet<>();
        showColumns.add("fseq");
        showColumns.add("org.name");
        showColumns.add("billno");
        showColumns.add("billname");
        showColumns.add("partb.name");
        showColumns.add("project.name");
        showColumns.add("signdate");
        showColumns.add("contracttype.contattr.name");
        showColumns.add("listname");
        showColumns.add("material.number");
        showColumns.add("material.name");
        showColumns.add("rateobj.name");
        showColumns.add("taxprice");
        showColumns.add("price");
    }
}
